{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the first part of the book, the author spends a lot of pages to explain how to prepare features and labels for training ML models. One of the part is about labeling. We briefly go through how to label data with my implementation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "df = pd.read_csv('data/MSFT.csv', index_col=0)\n",
    "start = '2000-01-01'\n",
    "end = '2018-01-01'\n",
    "df.index = pd.DatetimeIndex(df.index)\n",
    "df = df.loc[(df.index >= start) & (df.index <= end)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Volume</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2000-01-03</th>\n",
       "      <td>39.066089</td>\n",
       "      <td>39.482146</td>\n",
       "      <td>37.278708</td>\n",
       "      <td>38.796484</td>\n",
       "      <td>53228400.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-04</th>\n",
       "      <td>37.797947</td>\n",
       "      <td>38.982878</td>\n",
       "      <td>37.361920</td>\n",
       "      <td>37.485073</td>\n",
       "      <td>54119000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-05</th>\n",
       "      <td>36.985804</td>\n",
       "      <td>38.733244</td>\n",
       "      <td>36.403324</td>\n",
       "      <td>37.881159</td>\n",
       "      <td>64059600.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-06</th>\n",
       "      <td>37.341949</td>\n",
       "      <td>37.901130</td>\n",
       "      <td>36.070479</td>\n",
       "      <td>36.613017</td>\n",
       "      <td>54976600.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-07</th>\n",
       "      <td>36.153690</td>\n",
       "      <td>37.361920</td>\n",
       "      <td>35.717662</td>\n",
       "      <td>37.092315</td>\n",
       "      <td>62013600.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 Open       High        Low      Close      Volume\n",
       "Date                                                              \n",
       "2000-01-03  39.066089  39.482146  37.278708  38.796484  53228400.0\n",
       "2000-01-04  37.797947  38.982878  37.361920  37.485073  54119000.0\n",
       "2000-01-05  36.985804  38.733244  36.403324  37.881159  64059600.0\n",
       "2000-01-06  37.341949  37.901130  36.070479  36.613017  54976600.0\n",
       "2000-01-07  36.153690  37.361920  35.717662  37.092315  62013600.0"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We use `Close` for labeling."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "close = df['Close']\n",
    "close.plot();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "By reducing data points, we are able to train more efficiently and effectively. One of the examples is CUSUM Filter. CUSUM Filter samples points when data points deviate from historical means."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DatetimeIndex(['2000-01-12', '2000-01-18', '2000-01-19', '2000-02-08',\n",
      "               '2000-03-06', '2000-03-09', '2000-03-14', '2000-03-22',\n",
      "               '2000-03-23', '2000-03-27',\n",
      "               ...\n",
      "               '2017-09-11', '2017-09-21', '2017-10-05', '2017-10-19',\n",
      "               '2017-11-21', '2017-11-28', '2017-11-29', '2017-12-04',\n",
      "               '2017-12-06', '2017-12-19'],\n",
      "              dtype='datetime64[ns]', length=626, freq=None)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from finance_ml.stats import get_daily_vol\n",
    "from finance_ml.labeling import cusum_filter\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "h = 2 * close * get_daily_vol(close)\n",
    "timestamps = cusum_filter(close, h)\n",
    "print(timestamps)\n",
    "\n",
    "start = '2016-01-01'\n",
    "end = '2017-01-01'\n",
    "\n",
    "close.loc[(close.index >= start) & (close.index <= end)].plot(color='r');\n",
    "close_ = close.loc[timestamps]\n",
    "close_ = close_.loc[(close_.index >= start) & (close_.index <= end)]\n",
    "plt.scatter(close_.index, close_, color='k');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we define triple barriers: 2 horizontal and 1 vertical."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "****************************************************************************************************\n",
      "2000-01-12   2000-01-18\n",
      "2000-01-18   2000-01-24\n",
      "2000-01-19   2000-01-24\n",
      "2000-02-08   2000-02-14\n",
      "2000-03-06   2000-03-13\n",
      "Name: Date, dtype: datetime64[ns]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2018-10-25 21:35:48.914108 6.25% get_touch_idx done after 0.0 minutes. Remaining 0.06 minutes.\r",
      "2018-10-25 21:35:48.917843 12.5% get_touch_idx done after 0.0 minutes. Remaining 0.03 minutes.\r",
      "2018-10-25 21:35:48.919904 18.75% get_touch_idx done after 0.0 minutes. Remaining 0.02 minutes.\r",
      "2018-10-25 21:35:48.922768 25.0% get_touch_idx done after 0.0 minutes. Remaining 0.01 minutes.\r",
      "2018-10-25 21:35:48.923543 31.25% get_touch_idx done after 0.0 minutes. Remaining 0.01 minutes.\r",
      "2018-10-25 21:35:48.933323 37.5% get_touch_idx done after 0.0 minutes. Remaining 0.01 minutes.\r",
      "2018-10-25 21:35:48.938129 43.75% get_touch_idx done after 0.0 minutes. Remaining 0.01 minutes.\r",
      "2018-10-25 21:35:48.940338 50.0% get_touch_idx done after 0.0 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:48.941493 56.25% get_touch_idx done after 0.0 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:48.979157 62.5% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:49.002653 68.75% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:49.004534 75.0% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:49.014129 81.25% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:49.018381 87.5% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:49.022140 93.75% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:49.023962 100.0% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "****************************************************************************************************\n",
      "                   t1      trgt type\n",
      "2000-01-12 2000-01-14  0.020946   tp\n",
      "2000-01-18 2000-01-19  0.026268   sl\n",
      "2000-01-19 2000-01-24  0.033158   sl\n",
      "2000-02-08 2000-02-09  0.029899   sl\n",
      "2000-03-06 2000-03-08  0.027650   tp\n"
     ]
    }
   ],
   "source": [
    "from finance_ml.labeling import get_t1, get_events\n",
    "\n",
    "t1 = get_t1(close, timestamps, 5)\n",
    "print('*' * 100)\n",
    "print(t1.head())\n",
    "vol = get_daily_vol(close)\n",
    "events = get_events(close, timestamps, [1, 1], vol, min_ret=0,\n",
    "                    num_threads=16, t1=t1, side=None)\n",
    "\n",
    "print('*' * 100)\n",
    "print(events.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, we generate labels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                 ret  size\n",
      "2000-01-12  0.060864   1.0\n",
      "2000-01-18 -0.072067  -1.0\n",
      "2000-01-19 -0.053738  -1.0\n",
      "2000-02-08 -0.054029  -1.0\n",
      "2000-03-06  0.054513   1.0\n"
     ]
    }
   ],
   "source": [
    "from finance_ml.labeling import get_t1, get_sizes\n",
    "\n",
    "out = get_sizes(close, events, sign_label=False)\n",
    "print(out.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Meta Labeling\n",
    "\n",
    "We test metalabeling with randomly sampled sides. Metalabeling is a technique to separate deciding position side and betting size. For example, you can decide sides based on cross moving average and predicting size of betting by ML algorithms."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2018-10-25 21:35:51.707968 6.25% get_touch_idx done after 0.0 minutes. Remaining 0.06 minutes.\r",
      "2018-10-25 21:35:51.772927 12.5% get_touch_idx done after 0.01 minutes. Remaining 0.04 minutes.\r",
      "2018-10-25 21:35:51.794214 18.75% get_touch_idx done after 0.01 minutes. Remaining 0.02 minutes.\r",
      "2018-10-25 21:35:51.794837 25.0% get_touch_idx done after 0.01 minutes. Remaining 0.02 minutes.\r",
      "2018-10-25 21:35:51.795567 31.25% get_touch_idx done after 0.01 minutes. Remaining 0.01 minutes.\r",
      "2018-10-25 21:35:51.802192 37.5% get_touch_idx done after 0.01 minutes. Remaining 0.01 minutes.\r",
      "2018-10-25 21:35:51.802783 43.75% get_touch_idx done after 0.01 minutes. Remaining 0.01 minutes.\r",
      "2018-10-25 21:35:51.803541 50.0% get_touch_idx done after 0.01 minutes. Remaining 0.01 minutes.\r",
      "2018-10-25 21:35:51.807018 56.25% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:51.809095 62.5% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:51.810004 68.75% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:51.811160 75.0% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:51.812171 81.25% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:51.812207 87.5% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:51.815574 93.75% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\r",
      "2018-10-25 21:35:51.815619 100.0% get_touch_idx done after 0.01 minutes. Remaining 0.0 minutes.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                 ret  side  size\n",
      "2000-01-12  0.060864     1   1.0\n",
      "2000-01-18  0.072067    -1   1.0\n",
      "2000-01-19 -0.053738     1   0.0\n",
      "2000-02-08 -0.054029     1   0.0\n",
      "2000-03-06 -0.054513    -1   0.0\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/tom/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:194: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  self._setitem_with_indexer(indexer, value)\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "side = pd.Series(np.random.choice([-1, 1], len(close)), index=close.index)\n",
    "\n",
    "t1 = get_t1(close, timestamps, 5)\n",
    "vol = get_daily_vol(close)\n",
    "events = get_events(close, timestamps, [1, 1], vol, min_ret=0,\n",
    "                    num_threads=16, t1=t1, side=side)\n",
    "out = get_sizes(close, events, sign_label=False)\n",
    "print(out.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "label = out['size'] * out['side']\n",
    "start = '2016-01-01'\n",
    "end = '2017-01-01'\n",
    "\n",
    "label = label.loc[(label.index >= start) & (label.index <= end)]\n",
    "pos_idx = label.loc[label == 1].index\n",
    "neg_idx = label.loc[label == -1].index\n",
    "zero_idx = label.loc[label == 0].index\n",
    "close.loc[label.index].plot(color='k');\n",
    "plt.scatter(pos_idx, close.loc[pos_idx], color='b');\n",
    "plt.scatter(neg_idx, close.loc[neg_idx], color='r');\n",
    "plt.scatter(zero_idx, close.loc[zero_idx], color='g');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
